#include <list>
#include <iostream>
using namespace std;

class CIntList
{
    list<int> lst;
public:
    CIntList ()
    {
        lst.clear();
    }
    ~CIntList ()
    {
        lst.clear();
    }
    void insert_front(int x);
    void insert_back(int x);
    int del_front();
    int del_back();
    int front();
    int back();
    bool empty();
};

void CIntList::insert_front(int x)
{
    lst.push_front(x);
}

void CIntList::insert_back(int x)
{
    lst.push_back(x);
}

int CIntList::del_front()
{
    if(lst.empty())
        return 0;
    int ele = lst.front();
    lst.pop_front();
    return ele;
}

int CIntList::del_back()
{
    if(lst.empty())
        return 0;
    int ele = lst.back();
    lst.pop_back();
    return ele;
}

int CIntList::front()
{
    return lst.front();
}

int CIntList::back()
{
    return lst.back();
}

bool CIntList::empty()
{
    return lst.empty();
}

class CIntStack
{
    CIntList s;
public:
    CIntStack() = default;
    ~CIntStack() = default;
    void push(int x)
    {
        s.insert_front(x);
    }
    int pop()
    {
        return s.del_front();
    }
    int top()
    {
        return s.front();
    }
    int empty()
    {
        return s.empty();
    }
};

int main()
{
    CIntStack st;
    for(int i = 0; i < 10; ++i)
    {
        int val = rand()%100;
        st.push(val);
        cout << val << "\t";
    }
    cout << endl;

    while(!st.empty())
        cout << st.pop() << "\t";
    cout << endl;

    return 0;
}
